/**
 * ZHU framework. Copyright 2012-, all rights reserved.
 *
 * $Id: PeriodConversation.java 30 2012-08-28 07:55:17Z zhuxiaopeng $
 * $Revision: 30 $
 * $Date: 2012-08-28 15:55:17 +0800 (二, 2012-08-28) $
 * $Author: zhuxiaopeng $
 */
package daily.web.period;

import java.util.*;

import javax.enterprise.context.*;
import javax.inject.*;

import daily.entity.*;
import daily.service.*;
import daily.web.*;

/**
 * <p>
 * </p>
 * 
 * @author $Author: zhuxiaopeng $
 * @version $Revision: 30 $ - $Date: 2012-08-28 15:55:17 +0800 (二, 2012-08-28) $
 */
@Named
@ConversationScoped
public class PeriodConversation extends AbstractConversation {

	/**
	 * <h3>スレッドセーフ性</h3>
	 * <p>
	 * この変数は<code>this</code>によってGuardされる。 この変数は<code>final</code>
	 * であり、参照先がスレッドセーフであるため、スレッドセーフ性を破ることはない。
	 * この変数の参照先はスレッドセーフ<strong>ではない</strong>。
	 * </p>
	 */
	private static final long serialVersionUID = 1L;

	public void current() {
		dateRange = dateRange.current();
		dailyMap = null;
	}

	public synchronized void prior() {
		dateRange = dateRange.prior();
		dailyMap = null;
	}

	public synchronized void next() {
		dateRange = dateRange.next();
		dailyMap = null;
	}

	/**
	 * @return the periodType
	 */
	public synchronized PeriodType getPeriodType() {
		return periodType;
	}

	/**
	 * <p>
	 * プロパティ<code>periodType</code>の値を設定する。
	 * </p>
	 * 
	 * @param periodType
	 *            プロパティ<code>periodType</code>に設定する値
	 */
	public synchronized void setPeriodType(final PeriodType periodType) {
		final Date date = new Date();
		dateRange = DateRange.of(date, periodType);
	}

	/**
	 * @return the dailyMap
	 */
	public synchronized Map<Staff, List<DailyData>> getDailyMap() {
		return dailyMap;
	}

	/**
	 * @param dailyMap
	 *            the dailyMap to set
	 */
	public synchronized void setDailyMap(final Map<Staff, List<DailyData>> dailyMap) {
		this.dailyMap = dailyMap;
	}

	/**
	 * @return the selectDaily
	 */
	public synchronized Daily getSelectDaily() {
		return selectDaily;
	}

	/**
	 * @param selectDaily
	 *            the selectDaily to set
	 */
	public synchronized void setSelectDaily(final Daily selectDaily) {
		this.selectDaily = selectDaily;
	}

	/**
	 * @return the dateRange
	 */
	public synchronized DateRange getDateRange() {
		return dateRange;
	}

	/**
	 * @param dateRange
	 *            the dateRange to set
	 */
	public synchronized void setDateRange(final DateRange dateRange) {
		this.dateRange = dateRange;
	}

	private PeriodType periodType;

	private Map<Staff, List<DailyData>> dailyMap;

	private Daily selectDaily;

	private DateRange dateRange;

}
